﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ControlsLib;
using GestionePolveriLib.BL;
using GestionePolveriLib.Facades;
using Be.Timvw.Framework.ComponentModel;

namespace GestionePolveri2
{
    public partial class ControlloAccessoVerniciatori : ControlloAccessoVerniciatoriBase
    {
        public ControlloAccessoVerniciatori()
        {
            InitializeComponent();
        }

        public override void InitializeForm()
        {
            base.InitializeForm();

            if (!this.DesignMode)
            {
                this.EnableSorting = true;
                this.splitContainer1.Panel2Collapsed = true;
                this.ShowPanelMessage = false;
                this.CanModify = false;
                
                this.AddCustomButton("btnCaricaDati", "Refresh");
                this.AddCustomButton("btnSblocca", "Sblocca");
                this.ShowButton("btnOK", false);
                this.ShowButton("btnCancel", false);
                this.ShowButton("btnDelete", false);

                this.ButtonClicked += new EventHandler<CustomEventArgs<ControlloAccessoVerniciatore>>(AnagraficaFornitori_ButtonClicked);
                this.CustomButtonClicked += new EventHandler<CustomEventArgs<ControlloAccessoVerniciatore>>(Form_CustomButtonClicked);

                this.ItemSelected += new EventHandler<CustomEventArgs<ControlloAccessoVerniciatore>>(Form_ItemSelected);
                
                Load(false);
            }
        }

        void AnagraficaFornitori_ButtonClicked(object sender, CustomEventArgs<ControlloAccessoVerniciatore> e)
        {
            switch (e.Action)
            {
                case Actions.Delete:
                    {

                        ControlloAccessoVerniciatoriFacade pf = new ControlloAccessoVerniciatoriFacade();
                        if (!this.Current.IsBlocked)
                        {
                            if (this.Current.IDOperatore == Guid.Empty)
                            {
                                if (pf.Delete(this.Current.IDTurno, this.Current.IDImpianto))
                                {
                                    MessageBox.Show("Associazione Turno / Impianto eliminata.", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                                else
                                {
                                    MessageBox.Show("Operazione Fallita.", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Operazione Annullata. Combinazione turno / Impianto in uso", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }

                        Load(false);
                    }
                    break;
                default:
                    break;
            }
        }

        void Form_CustomButtonClicked(object sender, CustomEventArgs<ControlloAccessoVerniciatore> e)
        {
            if (e.ButtonName.Equals("btnCaricaDati", StringComparison.InvariantCultureIgnoreCase))
            {
                Load(false);
            }

            if (e.ButtonName.Equals("btnSblocca", StringComparison.InvariantCultureIgnoreCase))
            {
                if (this.Current != null)
                {
                    OperatoriFacade opf = new OperatoriFacade();
                    Operatore m_op = opf.GetOperatore(this.Principal.Identity.Name);

                    ControlloAccessoVerniciatoriFacade ptf = new ControlloAccessoVerniciatoriFacade();
                    if (ptf.Unblock(this.Current.IDTurno, this.Current.IDImpianto, m_op.ID))
                    {
                        this.MessageBoxA("Sblocco effettuato !");

                        Load(false);
                    }
                    else
                    {
                        this.MessageBoxA(string.Format("ERRORE:\n{0}", ptf.LastExceptionOccurred), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        void Form_ItemSelected(object sender, CustomEventArgs<ControlloAccessoVerniciatore> e)
        {
        }

        private void Load(bool selectLast)
        {
            ControlloAccessoVerniciatoriFacade cavf = new ControlloAccessoVerniciatoriFacade();

            cavf.RunAsync(() => cavf.Get(), (result) =>
            {
                this.Datasource = result;
            });
        }

        
    }

    public class ControlloAccessoVerniciatoriBase : AnagraficaManager<ControlloAccessoVerniciatore> { }
}
